/**
 * @author yinyuejia
 * @file 多语言封装
 */

import { createI18n } from 'vue-i18n';
// 引入element-plus多语言
// import zhCn from 'element-plus/lib/locale/lang/zh-cn';
import enUs from 'element-plus/lib/locale/lang/en';
import ptBr from 'element-plus/lib/locale/lang/pt';
import zh from './lang/zh-CN';
import en from './lang/en-US';
import pt from './lang/pt-BR';
import config from '@/config';
// import langApi from '@/apis/lang';
// import { languageKey } from './languageKey';
// import tool from '@/utils/tool';

// 初始多语言数组
export const localeList: any = [
  // 注释是因为他们都不想做国际化中文
  // {
  //   key: 'zh-CN',
  //   label: '中文',
  //   locale: zhCn,
  // },
  {
    key: 'en-US',
    label: 'English',
    locale: enUs,
  },
  {
    key: 'pt-BR',
    label: 'Português',
    locale: ptBr,
  },
];

// async function getAllLang(locale: any) {
//   return new Promise((resolve, reject) => {
//     const result: any = {};
//     langApi
//       .getAllLang(languageKey)
//       .then((res: any) => {
//         if (res.data && res.data.langData) {
//           res.data.langData.forEach((item: any) => {
//             result[item.msgCode] = item[locale.replace('-', '_')];
//           });
//         }
//         resolve(result);
//       })
//       .catch((err) => {
//         reject(err);
//       });
//   });
// }

// 引入对应文件
async function getLocaleMessages(locale: any) {
  const localeFormat = locale.replace('_', '-');
  const messages = await import(`./lang/${localeFormat}.ts`);
  const elMessages = localeList.find((a: any) => a.key === localeFormat).locale;
  // const allLang: any = await getAllLang(locale);

  return {
    el: elMessages,
    ...messages.default,
    // ...allLang,
  };
}

// 设置本地语言
export async function setI18nLanguage(i18n: any, locale: any) {
  const messages = await getLocaleMessages(locale);
  i18n.global.setLocaleMessage(locale, messages);
  i18n.global.locale.value = locale;
}

// 创建多语言脚本
export function setI18n(options: any) {
  const i18n = createI18n(options);
  // setI18nLanguage(i18n, options.locale);
  return i18n;
}

const i18n = setI18n({
  legacy: false,
  locale: config.system.LOCALE,
  fallbackLocale: config.system.LOCALE,
  silentFallbackWarn: true,
  silentTranslationWarn: true,
  messages: {
    'zh-CN': zh,
    'pt-BR': pt,
    'en-US': en,
  },
});
export default i18n;
